﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Marketing.Common;
using System.Data.SqlClient;
using Chilis.Marketing.Business.Entity;
using System.Data;

namespace Chilis.Marketing.Data.Access
{
    public class DARecursoMaterial : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;
        ChilisDataContext chilisDataContext = new ChilisDataContext();

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarRecursoMaterial
        /// Descripción         : Inserta Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="actividadBE">Entidad que representa la Actividad</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id del Material insertado</returns>
        public int? insertarRecursoMaterial(BEActividad actividadBE,
                                           bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                BERecursoMaterial recursoMaterialBE = null;
                BEMaterial materialBE = null;
                if (actividadBE.LRecurso != null && actividadBE.LRecurso.Count > 0)
                {
                    recursoMaterialBE = (BERecursoMaterial)actividadBE.LRecurso[0];
                    if (recursoMaterialBE.Material != null)
                    {
                        materialBE = recursoMaterialBE.Material;
                    }
                    else
                    {
                        return codInsertado;
                    }
                }
                else
                {
                    return codInsertado;
                }

                decimal? tempCosto = (decimal)recursoMaterialBE.Costo;
                int? tempIdActividad = null;
                if (actividadBE != null)
                {
                    tempIdActividad = actividadBE.IdActividad;
                }
                int? tempIdMaterial = null;
                if (materialBE != null)
                {
                    tempIdMaterial = materialBE.IdMaterial;
                }
                int? tempEstado = (int)recursoMaterialBE.Estado;
                
                chilisDataContext.spInsertaMaterialActividad(ref codInsertado,
                                                             recursoMaterialBE.Cantidad,
                                                             tempCosto,
                                                             tempIdActividad,
                                                             tempIdMaterial,
                                                             tempEstado,
                                                             recursoMaterialBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarRecursoMaterial
        /// Descripción         : Modifica Recurso Material en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoMaterialBE">Entidad que representa el Recurso Material</param>
        /// <param name="actividadBE">Entidad que representa la Actividad</param>
        /// <param name="materialBE">Entidad que representa el Material</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarRecursoMaterial(BEActividad actividadBE,
                                             bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                BERecursoMaterial recursoMaterialBE = null;
                BEMaterial materialBE = null;
                if (actividadBE.LRecurso != null && actividadBE.LRecurso.Count > 0)
                {
                    recursoMaterialBE = (BERecursoMaterial)actividadBE.LRecurso[0];
                    if (recursoMaterialBE.Material != null)
                    {
                        materialBE = recursoMaterialBE.Material;
                    }
                    else
                    {
                        return respuesta;
                    }
                }
                else
                {
                    return respuesta;
                }

                decimal? tempCosto = (decimal)recursoMaterialBE.Costo;
                int? tempIdActividad = null;
                if (actividadBE != null)
                {
                    tempIdActividad = actividadBE.IdActividad;
                }
                int? tempIdMaterial = null;
                if (materialBE != null)
                {
                    tempIdMaterial = materialBE.IdMaterial;
                }
                int? tempEstado = (int)recursoMaterialBE.Estado;

                chilisDataContext.spModificaMaterialActividad(recursoMaterialBE.IdRecurso,
                                                              recursoMaterialBE.Cantidad,
                                                              tempCosto,
                                                              tempIdActividad,
                                                              tempIdMaterial,
                                                              tempEstado,
                                                              recursoMaterialBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarRecursoMaterial
        /// Descripción         : Elimina Recurso Material en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoMaterialBE">Entidad que representa el Recurso Material</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarRecursoMaterial(BERecursoMaterial recursoMaterialBE,
                                            bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)recursoMaterialBE.Estado;

                chilisDataContext.spEliminaMaterialActividad(recursoMaterialBE.IdRecurso,
                                                             tempEstado,
                                                             recursoMaterialBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : obtenerRecursoMaterialPorId
        /// Descripción         : Obtiene la Entidad Recurso Material
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="idRecursoMaterial">Id Recurso Material</param>
        /// <returns>Retorna el Objeto que representa la Entidad Recurso Material</returns>
        public BERecursoMaterial obtenerRecursoMaterialPorId(int idRecursoMaterial)
        {
            DataSet ds = null;
            BERecursoMaterial recursoMaterialBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelMaterialActividadPorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdMaterialActividad", idRecursoMaterial));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    recursoMaterialBE = this.poblarRecursoMaterial(ds.Tables[(int)Constantes.ROL_DATOS.DATOS_GENERALES], recursoMaterialBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return recursoMaterialBE;
        }

        /// <summary>
        /// Método              : poblarRecursoMaterial
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Recurso Material
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="dtRecursoMaterial">Resultado de la Búsqueda por Id</param>
        /// <param name="recursoMaterialBE">Entidad que representa el Recurso Material</param>
        /// <returns>Retorna el Objeto que representa la Entidad Recurso Material</returns>
        public BERecursoMaterial poblarRecursoMaterial(DataTable dtRecursoMaterial, BERecursoMaterial recursoMaterialBE)
        {
            if (dtRecursoMaterial != null && dtRecursoMaterial.Rows.Count > 0)
            {
                if (recursoMaterialBE == null)
                {
                    recursoMaterialBE = new BERecursoMaterial();
                }
                DataRow drRecursoMaterial = dtRecursoMaterial.Rows[0];
                if (drRecursoMaterial["id_material_actividad"] != DBNull.Value)
                {
                    int tempIdMaterialActividad = 0;
                    int.TryParse(drRecursoMaterial["id_material_actividad"].ToString(), out tempIdMaterialActividad);
                    recursoMaterialBE.IdRecurso = tempIdMaterialActividad;
                }

                if (drRecursoMaterial["cantidad"] != DBNull.Value)
                {
                    int tempCantidad = 0;
                    int.TryParse(drRecursoMaterial["cantidad"].ToString(), out tempCantidad);

                    recursoMaterialBE.Cantidad = tempCantidad;
                }
                if (drRecursoMaterial["costo"] != DBNull.Value)
                {
                    double tempCosto = 0;
                    if (double.TryParse(drRecursoMaterial["costo"].ToString(), out tempCosto))
                    {
                        recursoMaterialBE.Costo = tempCosto;
                    }
                }
                if (drRecursoMaterial["id_material"] != DBNull.Value)
                {
                    int tempIdMaterial = 0;
                    int.TryParse(drRecursoMaterial["id_material"].ToString(), out tempIdMaterial);

                    if (tempIdMaterial > 0)
                    {
                        if (recursoMaterialBE.Material == null)
                        {
                            recursoMaterialBE.Material = new BEMaterial();                            
                        }
                        recursoMaterialBE.Material.IdMaterial = tempIdMaterial;
                    }
                }
                if (drRecursoMaterial["nombre_material"] != DBNull.Value)
                {
                    if (recursoMaterialBE.Material == null)
                    {
                        recursoMaterialBE.Material = new BEMaterial();
                    }
                    recursoMaterialBE.Material.Descripcion = drRecursoMaterial["nombre_material"].ToString();
                }
                if (drRecursoMaterial["estado"] != DBNull.Value)
                {
                    recursoMaterialBE.Estado = Common.Constantes.ObtenerEnumEstado(drRecursoMaterial["estado"].ToString());
                }
            }
            return recursoMaterialBE;
        }

        #endregion
    }
}
